const jwt = require("jsonwebtoken");
const {
  createUser,
  getUserInfo,
  updateById,
} = require("../service/user.service");
const {
  userLoginError,
  userRegisterError,
  updatePasswordError,
} = require("../constants/err.type");
const { JWT_SECRET } = require("../config/config.default");

class UserController {
  async register(ctx, next) {
    // 1、获取请求参数：
    const { user_name, password } = ctx.request.body;

    // 捕获请求数据库之间错误
    try {
      // 2、操作数据库
      const res = await createUser(user_name, password);

      // 3、返回结果
      ctx.body = {
        code: 0,
        message: "用户注册成功",
        result: {
          id: res.id,
          user_name: res.user_name,
        },
      };
    } catch (error) {
      console.log(error);
      ctx.app.emit("error", userRegisterError, ctx);
    }
  }

  async login(ctx, next) {
    ctx.body = "用户登录";
    // 1.获取用户信息
    const { user_name } = ctx.request.body;
    try {
      const { password, ...res } = await getUserInfo({ user_name });
      console.log(res, "resresres");
      ctx.body = {
        code: 0,
        message: "用户登录成功",
        result: {
          // expiresIn过期时间
          token: jwt.sign(res, JWT_SECRET, { expiresIn: "1d" }),
        },
      };
    } catch (error) {
      console.log(error);
      ctx.app.emit("error", userLoginError, ctx);
    }
  }

  async changePassword(ctx, next) {
    try {
      // 1. 获取数据
      const { id } = ctx.state.user;
      const { password } = ctx.request.body;

      // 2. 操作数据库
      const res = await updateById({ id, password });

      // 3. 返回结果
      if (res) {
        ctx.body = {
          code: 0,
          message: "修改密码成功",
          result: "",
        };
      } else {
        ctx.app.emit("error", updatePasswordError, ctx);
      }
    } catch (error) {
      console.error(error);
      ctx.app.emit("error", updatePasswordError, ctx);
    }
  }
}

module.exports = new UserController();
